const chooseLocation = requirePlugin('chooseLocation');
Page({
  data: {
    addressList: [], // 地址列表
    selectMode: false, // 是否为选择模式
    defaultAddressId: null, // 默认地址ID
    isFromOrderConfirm: false // 是否来自订单确认页面
  },

  onLoad(query) {
    console.log('address-manage onLoad - 页面加载，参数:', query);
    
    // 获取选择模式参数
    if (query.selectMode) {
      this.setData({
        selectMode: query.selectMode === 'true'
      });
    }
    
    // 检查是否来自订单确认页面
    const pages = getCurrentPages();
    console.log('address-manage onLoad - 页面栈:', pages.map(p => p.route));
    
    if (pages.length > 1) {
      const prevPage = pages[pages.length - 2];
      console.log('address-manage onLoad - 上一页信息:', {
        route: prevPage?.route,
        fullPath: prevPage?.route
      });
      
      if (prevPage && prevPage.route && prevPage.route.includes('order-confirm')) {
        console.log('address-manage onLoad - 检测到来自订单确认页面');
        this.setData({
          isFromOrderConfirm: true
        });
      } else {
        console.log('address-manage onLoad - 不是来自订单确认页面');
      }
    } else {
      console.log('address-manage onLoad - 页面栈不足');
    }
    
    // 加载地址列表
    this.loadAddressList();
  },

  // 加载地址列表
  loadAddressList() {
    let token = '';
    try {
      token = wx.getStorageSync('token');
    } catch (e) {
      console.error('获取token失败', e);
    }

    wx.showLoading({
      title: '加载中...',
      mask: true
    });

    // 使用新的接口获取用户所有地址
    wx.request({
      url: 'http://localhost:8080/point/address/user/901', // 使用新的接口
      method: 'GET',
      header: {
        'Authorization': token,
        'Content-Type': 'application/json'
      },
      success: (res) => {
        wx.hideLoading();
        if (res.data.code === 200) {
          const addressList = res.data.data || [];
          
          // 显示全部数据
          this.setData({
            addressList: addressList
          });
          
          // 找到默认地址ID
          const defaultAddress = addressList.find(addr => addr.isDefault === 1);
          if (defaultAddress) {
            this.setData({
              defaultAddressId: defaultAddress.id
            });
          }
        } else {
          wx.showToast({
            title: res.data.msg || '获取地址列表失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('获取地址列表失败', err);
        wx.showToast({
          title: '获取地址列表失败',
          icon: 'none'
        });
      }
    });
  },

  // 选择地址（点击地址栏）
  onSelectAddress(e) {
    const { address } = e.currentTarget.dataset;
    console.log('address-manage: 点击地址栏，选中的地址:', address);
    console.log('address-manage: 是否来自订单确认页面:', this.data.isFromOrderConfirm);
    
    // 如果来自订单确认页面，直接返回并更新地址
    if (this.data.isFromOrderConfirm) {
      console.log('address-manage: 来自订单确认页面，准备更新地址');
      this.updateOrderConfirmAddress(address);
      return;
    }
    
    // 如果是选择模式，返回选中的地址到上一页
    if (this.data.selectMode) {
      console.log('address-manage: 选择模式，返回地址到上一页');
      const pages = getCurrentPages();
      if (pages.length > 1) {
        const prevPage = pages[pages.length - 2];
        if (prevPage && prevPage.onAddressSelected) {
          prevPage.onAddressSelected(address);
        }
      }
      wx.navigateBack();
    }
  },

  // 更新订单确认页面的地址
  updateOrderConfirmAddress(selectedAddress) {
    console.log('address-manage: 开始更新订单确认页面地址:', selectedAddress);
    
    // 方法1: 通过页面栈更新
    const pages = getCurrentPages();
    console.log('address-manage: 页面栈:', pages.map(p => p.route));
    
    if (pages.length > 1) {
      const prevPage = pages[pages.length - 2];
      console.log('address-manage: 上一页信息:', {
        route: prevPage?.route,
        hasOnAddressSelected: !!prevPage?.onAddressSelected,
        hasSetData: !!prevPage?.setData
      });
      
      if (prevPage && prevPage.route && prevPage.route.includes('order-confirm')) {
        console.log('address-manage: 确认来自订单确认页面');
        
        // 调用上一页的地址更新方法
        if (prevPage.onAddressSelected) {
          console.log('address-manage: 调用 onAddressSelected 方法');
          prevPage.onAddressSelected(selectedAddress);
        } else {
          console.log('address-manage: onAddressSelected 方法不存在，直接更新数据');
          // 如果方法不存在，直接更新数据
          prevPage.setData({
            defaultAddress: selectedAddress
          });
        }
        
        // 方法2: 使用全局变量存储选中的地址
        const app = getApp();
        app.globalData.selectedAddress = selectedAddress;
        console.log('address-manage: 已将地址存储到全局变量:', app.globalData.selectedAddress);
        
        // 显示选择成功提示
        wx.showToast({
          title: '地址已切换',
          icon: 'success'
        });
        
        // 返回上一页
        setTimeout(() => {
          console.log('address-manage: 准备返回上一页');
          wx.navigateBack();
        }, 1000);
      } else {
        console.log('address-manage: 上一页不是订单确认页面');
      }
    } else {
      console.log('address-manage: 页面栈不足，无法获取上一页');
    }
  },

  // 阻止操作按钮事件冒泡
  onActionTap() {
    // 这个方法用于阻止事件冒泡，不需要做任何操作
    return;
  },

  // 新增地址
  onAddAddress() {
    wx.navigateTo({
      url: '/my/pages/address-edit/address-edit'
    });
  },

  // 编辑地址
  onEditAddress(e) {
    const { id } = e.currentTarget.dataset;
    wx.navigateTo({
      url: `/my/pages/address-edit/address-edit?id=${id}`
    });
  },

  // 删除地址
  onDeleteAddress(e) {
    const { id, consignee } = e.currentTarget.dataset;
    
    wx.showModal({
      title: '确认删除',
      content: `确定要删除收货人"${consignee}"的地址吗？`,
      confirmText: '删除',
      confirmColor: '#e74c3c',
      success: (res) => {
        if (res.confirm) {
          this.deleteAddress(id);
        }
      }
    });
  },

  // 执行删除
  deleteAddress(id) {
    let token = '';
    try {
      token = wx.getStorageSync('token');
    } catch (e) {
      console.error('获取token失败', e);
    }

    wx.showLoading({
      title: '删除中...',
      mask: true
    });

    wx.request({
      url: `http://localhost:8080/point/address/${id}`,
      method: 'DELETE',
      header: {
        'Authorization': token,
        'Content-Type': 'application/json'
      },
      success: (res) => {
        wx.hideLoading();
        if (res.data.code === 200) {
          wx.showToast({
            title: '删除成功',
            icon: 'success'
          });
          
          // 刷新地址列表
          this.loadAddressList();
        } else {
          wx.showToast({
            title: res.data.msg || '删除失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('删除地址失败', err);
        wx.showToast({
          title: '删除失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 设置默认地址
  onSetDefault(e) {
    const { id } = e.currentTarget.dataset;
    
    let token = '';
    try {
      token = wx.getStorageSync('token');
    } catch (e) {
      console.error('获取token失败', e);
    }

    wx.showLoading({
      title: '设置中...',
      mask: true
    });

    // 先清除其他默认地址，再设置当前地址为默认
    wx.request({
      url: `http://localhost:8080/point/address`,
      method: 'PUT',
      header: {
        'Authorization': token,
        'Content-Type': 'application/json'
      },
      data: {
        id: id,
        isDefault: 1
      },
      success: (res) => {
        wx.hideLoading();
        if (res.data.code === 200) {
          wx.showToast({
            title: '设置成功',
            icon: 'success'
          });
          
          // 刷新地址列表
          this.loadAddressList();
        } else {
          wx.showToast({
            title: res.data.msg || '设置失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('设置默认地址失败', err);
        wx.showToast({
          title: '设置失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 复制地址
  onCopyAddress(e) {
    const { address } = e.currentTarget.dataset;
    
    wx.setClipboardData({
      data: address,
      success: () => {
        wx.showToast({
          title: '地址已复制',
          icon: 'success'
        });
      }
    });
  },

  // 页面显示时刷新地址列表
  onShow() {
    this.loadAddressList();
  },

  // 返回上一页
  onBack() {
    wx.navigateBack();
  }
});